package bufferedoutputstream01;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
* BufferedInputSteam
*  构造方法:
*    BufferedInputStream(InputStream in)
          创建一个 BufferedInputStream 并保存其参数，即输入流 in，以便将来使用。
      int read()
          参见 InputStream 的 read 方法的常规协定。
      public int read(byte[] b)
         throws IOException从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前，此方法将阻塞。

     BufferedInputSteam底层也会开辟一个默认长度为8192的字节数组,将来读到数据都会存储到这个字节数组中去
* */
public class BufferInputStream02 {
    public static void main(String[] args) throws IOException {
        method01();
        method02();
    }

    private static void method02() throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("day23/8.txt"));
        byte[] bytes = new byte[2];
        int length = bis.read(bytes); //返回的是读取的有效字节个数
                                     //先把文件中的字节尽可能多的读取到底层的8192字节数组中去
                                    //将8192字节数组的前两个字节拷贝到bytes数组中去
        System.out.println(new String(bytes,0,length));  // cd
        bis.close();
    }

    private static void method01() throws IOException {
        // 1.通过FileInputStream关联一个文件
        FileInputStream fis = new FileInputStream("day23/8.txt");
        // 2.将fis传给BufferedInputStream的构造方法
        BufferedInputStream bis = new BufferedInputStream(fis);
        // 3.读取文件的字节
        int b = bis.read();               //当我们调用read()方法,底层会从文件中读取尽可能多的字节(一次最多8192字节),
                                         // 存储到底层开辟的8192字节数组中去
                                         //后期使用的文件中的字节都是从8192字节数组去取
        System.out.println((char)b); // c
        // 4.关闭释放资源
        bis.close();
    }
}
